﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using log4net;
using Iudicium.Utilitarios;

public partial class Seguridad_Usuarios_FormularioUsuario : System.Web.UI.Page
{

    private static readonly ILog log = LogManager.GetLogger("LogFile");

    public int UsuarioId
    {
        set { UsuarioIdHiddenField.Value = value.ToString(); }
        get
        {
            int usuarioId = 0;
            try
            {
                usuarioId = Convert.ToInt32(UsuarioIdHiddenField.Value);
            }
            catch { }
            return usuarioId;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ObtenerParametros();
        }
    }

    protected void ObtenerParametros()
    {
        if (Session["UsuarioId"] != null && !string.IsNullOrEmpty(Session["UsuarioId"].ToString()))
        {
            UsuarioId = 0;
            try
            {
                UsuarioIdHiddenField.Value = Session["UsuarioId"].ToString();
                CargarDatos();
                PasswordPanel.Visible = false;
                CambiarPasswordPanel.Visible = true;
            }
            catch(Exception ex){
                log.Error("No se pudo obtener el usuarioId de los parametros de session", ex);
            }
            
        }
        Session["UsuarioId"] = null;
    }

    protected void CargarDatos()
    {
        Iudicium.Seguridad.Usuario user = null;
        try
        {
            user = Iudicium.Seguridad.CRN.UsuarioCRN.GetUsuarioByUsuarioId(UsuarioId);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo obtener el Usuario a editar", ex);
            Notificacion.MostrarNotificacion("Ocurrio un error al tratar cargar los datos del Usuario a editar", Notificacion.TipoNotificacion.Error);
            ControlNotificacion.Update();
            return;
        }
        if (user == null)
            return;

        Iudicium.Persona.PersonaNatural persona = null;

        try
        {
            persona = Iudicium.Persona.CRN.PersonaNaturalCRN.GetPersonaNaturalById(UsuarioId);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo obtener los datos de la Persona vinculada al Usuario", ex);
        }

        PersonaSeleccionada.SelectedId = user.UsuarioId;
        PersonaSeleccionada.SelectedName = persona != null ? persona.Nombre : user.NombreUsuario;
        PersonaSeleccionada.Enabled = false;
        NombreUsuarioTextBox.Text = user.NombreUsuario;
        RolesDropDownList.SelectedValue = user.RolId.ToString();
        if (user.Estado == Iudicium.Seguridad.Usuario.EstadoUsuario.Activo)
        {
            ActivoRadioButton.Checked = true;
            InactivoRadioButton.Checked = false;
        }
        else
        {
            ActivoRadioButton.Checked = false;
            InactivoRadioButton.Checked = true;
        }

    }

    protected void GuardarLinkButton_Click(object sender, EventArgs e)
    {
        

        int rolId = 0;

        try
        {
            rolId = Convert.ToInt32(RolesDropDownList.SelectedValue);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo convertir el id del Rol a un valor entero.", ex);
        }

        Iudicium.Seguridad.Usuario.EstadoUsuario estado = ActivoRadioButton.Checked ? 
            Iudicium.Seguridad.Usuario.EstadoUsuario.Activo : 
            Iudicium.Seguridad.Usuario.EstadoUsuario.Inactivo;
        string password = Utilitarios.Encriptar(PasswordTextBox.Text);
        Iudicium.Seguridad.Usuario user = new Iudicium.Seguridad.Usuario(PersonaSeleccionada.SelectedId, NombreUsuarioTextBox.Text, password,
            rolId,  estado );

        if (UsuarioId == 0)
        {
            bool existe = true;

            try
            {
                existe = Iudicium.Seguridad.CRN.UsuarioCRN.ExisteUsuario(NombreUsuarioTextBox.Text);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo verificar la existencia del nombre de usuario", ex);
            }

            if (existe)
            {
                Notificacion.MostrarNotificacion("El nombre de usuario ingresado ya se encuentra registrado en el sistema.", Notificacion.TipoNotificacion.Error);
                ControlNotificacion.Update();
                return;
            }
            try
            {
                Iudicium.Seguridad.CRN.UsuarioCRN.InsertUsuario(user);
                Notificacion.MostrarNotificacion("Los datos del nuevo usuario se guardaron correctamente.", Notificacion.TipoNotificacion.Alert);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo insertar el registro de usuario", ex);
                Notificacion.MostrarNotificacion("Ocurrio un error al guardar los datos del nuevo Usuario.", Notificacion.TipoNotificacion.Error);
                ControlNotificacion.Update();
                return;
            }
        }
        else
        {
            try
            {
                Iudicium.Seguridad.CRN.UsuarioCRN.UpdateUsuario(user);
                Notificacion.MostrarNotificacion("Los datos del usuario se guardaron correctamente.", Notificacion.TipoNotificacion.Alert);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo actualizar el registro de usuario", ex);
                Notificacion.MostrarNotificacion("Ocurrio un error al guardar los datos del Usuario.", Notificacion.TipoNotificacion.Error);
                ControlNotificacion.Update();
                return;
            }
        }
        Response.Redirect("~/Seguridad/Usuarios/ListaUsuarios.aspx");
    }

    protected void RolesDropDownList_DataBound(object sender, EventArgs e)
    {
        ListItem item = new ListItem("-- Seleccione un Rol --", "");
        RolesDropDownList.Items.Insert(0, item);
    }

    protected void CambiarPasswordLinkButton_Click(object sender, EventArgs e)
    {
        Session["UsuarioId"] = UsuarioId;
        Session["BackToUrl"] = "~/Seguridad/Usuarios/FormularioUsuario.aspx";
        Response.Redirect("~/Seguridad/Usuarios/FormularioCambiarPassword.aspx");
    }
}